

//  联调接口
//  适配 
//  还原UI设计稿 


//  token   前后端加密数据通信的一种方式  
//  Token是服务端生成的一串字符串，以作客户端进行请求的一个令牌，
// 当第一次登录后，服务器生成一个Token便将此Token返回给客户端，
// 以后客户端只需带上这个Token前来请求数据即可，无需再次带上用户名和密码

// 使用Token的目的：Token的目的是为了减轻服务器的压力，减少频繁的查询数据库，使服务器更加健壮
var jwt = require("jsonwebtoken")

var secret = "WH2006-daydayup";

// Token 加密  
var createToken = function (data) {
    return jwt.sign(data, secret, { expiresIn: '2h' });
}

exports.createToken = createToken;


// token 解密   
var decodeToken = function (token) {
    return new Promise(function (resolve, reject) {
        jwt.verify(token, secret, (err, data) => {
            if (err) {
                console.log(err);
                reject(err);
            } else {
                console.log(data);
                resolve(data);
            }
        })
    })
}

exports.decodeToken = decodeToken;

// 检查token 是否有效
// 1. token 不存在
// 2. token 过期
// 3. token 不正确 
// code ==3000 表示 token 有问题 登录异常 


var checkToken = function (req, res, callback) {
    var token = req.headers.token;  // 前端发送过来的请求头的token 
    if (token) {
        decodeToken(token)
            .then(result => {
                callback(result)   // token 验证通过  
            })
            .catch(err => {
                res.json({
                    msg: "token失效或者无效,请登陆",
                    code: 3000,
                    type: 0,
                    err
                })
            })
    } else {
        res.json({
            msg: "token不存在,请登陆",
            code: 3000,
            type: 0
        })
    }

}

exports.checkToken = checkToken;